package ar.com.jsejtman.common.mail.service;

import ar.com.jsejtman.common.mail.entity.EmailServerConfiguration;
import ar.com.jsejtman.common.persistence.dao.GenericDao;
import ar.com.jsejtman.common.persistence.exception.DaoException;
import ar.com.jsejtman.common.service.definition.BaseService;
import ar.com.jsejtman.common.service.exception.EntityRetrievalException;
import java.util.List;
import org.springframework.stereotype.Service;

/**
 * Administra la configuración de los servidores de Emails.
 * 
 * @author jsejtman
 */
@Service
public class EmailServerConfigurationService extends BaseService implements
        IEmailServerConfigurationService {

	/**
	 * Obtiene la configuración del servidor de Emails, a partir de la base de datos.
	 * 
	 * @return Configuración del servidor de Emails.
	 * @throws EntityRetrievalException En caso de problemas al enviar el Email.
	 */
	public final EmailServerConfiguration getEmailServerConfiguration()
	        throws EntityRetrievalException {

		try {
			final GenericDao<EmailServerConfiguration, Long> dao = this.getDaoFactory().newDao();

			/*
			 * Solamente obtiene el primer servidor de configuración. Se entiende que en el cliente
			 * habrá solamente uno. En el caso de necesitar más de uno, deberá modificarse el método
			 * por completo.
			 */
			final List<EmailServerConfiguration> configuration =
			        dao.getAll(EmailServerConfiguration.class);

			if (configuration == null || configuration.size() == 0) {
				throw new EntityRetrievalException(
				        "No hay configuración de correo en la base de datos.");
			}

			return (configuration.get(0));

		} catch (final DaoException e) {
			throw new EntityRetrievalException(e.getMessage(), e);
		}
	}
}
